global generar_tabla_apariciones
;unsigned int *generar_tabla_apariciones ( unsigned char *buf, unsigned int size)

extern calloc

%define p_buffer ebp+8
%define size ebp+12

%define max_simbolos 256
%define sizeof_unsigned_int 4
%define null 0


section .text
generar_tabla_apariciones:	
	;enter 0,0	; comentado para probar con valgrind
	push ebp
	mov ebp,esp
	
	push ebx
	push esi
	push edi

	push dword sizeof_unsigned_int
	push dword max_simbolos
	call calloc		; pedimos memoria para la lista de simbolos
	add esp,8		; en eax queda el puntero al array a devolver

	mov ecx, [size]		; ecx guarda el indice del ciclo
	mov esi, [p_buffer]	; esi se mueve por el buffer
	
	cmp esi,null
	jne _ciclo
	xor eax,eax
	jmp fin
	
_ciclo:
	xor ebx,ebx
	mov bl,[esi]
	
	inc dword[eax + 4*ebx]
	inc esi			; esi apunta al proximo del buffer
	loop _ciclo
	;Al terminar el ciclo en eax ya esta el puntero a devolver
fin:
	pop edi
	pop esi
	pop ebx
	leave
	ret
	
